
const http = require('http')
const Router = require('./router')
const methods = require('methods');

function Application(){
    this.router = new Router()  //创建应用同时创建一个路由系统
}
Application.prototype.lazy_route = function(){
    if(!this.router){
        this.router = new Router(); // 将路由的创建做了一个懒加载
    }
}


// 源码中依赖了一个库 methods  第三方模块 是express中使用的
// 别人依赖了这个包，我可以直接使用这个包  幽灵依赖  
// A (C) B  可以直接使用c  有一天a不用c 就挂了
methods.forEach((method)=>{
    Application.prototype[method] = function (pathname, ...handlers) { // 用户的get
        // this.lazy_route();
        this.router[method](pathname,handlers);
    }
})
Application.prototype.listen = function(){
    const server = http.createServer((req,res)=>{
        // 当路由系统找不到改路径匹配，返回找不到
        function done(){
            res.end(`cannot  ${req.method} ${req.url}`)
        }
        this.router.handle(req,res,done)

    })
    server.listen(...arguments)
}
module.exports = Application



